import type { MenuApi, PageResult, PermissionApi, RoleApi } from '#/api/types';

import { Http as http } from '#/api/http';

/**
 * 创建角色
 * @param data 角色创建参数
 */
export async function createRoleApi(data: RoleApi.CreateParams) {
  return http.post<RoleApi.RoleVO>('/system/role/create', data);
}

/**
 * 更新角色
 * @param data 角色更新参数
 */
export async function updateRoleApi(data: RoleApi.UpdateParams) {
  return http.post<RoleApi.RoleVO>('/system/role/update', data);
}

/**
 * 删除角色
 * @param roleId 角色ID
 */
export async function deleteRoleApi(roleId: number) {
  return http.post<boolean>('/system/role/delete', { roleId });
}

/**
 * 批量删除角色
 * @param roleIds 角色ID数组
 */
export async function batchDeleteRolesApi(roleIds: number[]) {
  return http.post<boolean>('/system/role/batch/delete', { roleIds });
}

/**
 * 更新角色状态
 * @param data 状态更新参数
 */
export async function updateRoleStatusApi(data: RoleApi.StatusUpdateParams) {
  return http.post<string>('/system/role/status/update', data);
}

/**
 * 获取角色列表
 * @param params 查询参数
 */
export async function getRoleListApi(params: RoleApi.RoleListParams) {
  return http.get<PageResult<RoleApi.RoleVO>>('/system/role/list', params);
}

/**
 * 获取角色信息
 * @param roleId 角色ID
 */
export async function getRoleInfoApi(roleId: number) {
  return http.get<RoleApi.RoleVO>('/system/role/info', { roleId });
}

/**
 * 获取角色权限列表
 * @param roleId 角色ID
 */
export async function getRolePermissionsApi(roleId: number) {
  return http.get<PermissionApi.PermissionVO[]>(
    '/system/role/permission/list',
    { roleId },
  );
}

/**
 * 更新角色权限
 * @param data 权限更新参数
 * @param data.assignPermissionIds 要分配的权限ID列表
 * @param data.removePermissionIds 要移除的权限ID列表
 * @param data.roleId 角色ID
 */
export async function updateRolePermissionsApi(param: {
  assignPermissionIds: string[];
  removePermissionIds: string[];
  roleId: number;
}) {
  return http.post<string>('/system/role/permission/update', param);
}

/**
 * 获取角色菜单列表
 * @param roleId 角色ID
 */
export async function getRoleMenuListApi(roleId: number) {
  return http.get<MenuApi.MenuVO[]>(`/system/role/menu/list/${roleId}`);
}

/**
 * 更新角色菜单
 * @param param 菜单更新参数
 * @param param.assignMenuIds 要分配的菜单ID列表
 * @param param.removeMenuIds 要移除的菜单ID列表
 * @param param.roleId 角色ID
 */
export async function updateRoleMenuApi(param: {
  assignMenuIds: number[];
  removeMenuIds: number[];
  roleId: number;
}) {
  return http.post<string>('/system/role/menu/update', param);
}
